home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fatted Calf
/
The Fatted Calf.iso
/
Applications
/
Unix
/
MOTD
/
Source
/
MOTD.m
< prev
next >
Wrap
Text File
|
1992-11-04
|
5KB
|
224 lines
/* Program: MOTD - 'Motto of the day' window
*
* By: Christopher Lane (lane@sumex-aim.stanford.edu)
* Symbolic Systems Resources Group
* Knowledge Systems Laboratory
* Stanford University
*
* Contributors:
*
* Izumi Ohzawa (izumi@violet.berkeley.edu)
* Group in Neurobiology/School of Optometry
* University of California, Berkeley
*
* Steve Hayman (sahayman@cs.indiana.edu)
* Computer Science Department Workstation Manager
*
* Date: 5 November 1992
*
* Copyright: 1989, 1990, 1991 & 1992 by The Leland Stanford Junior University.
* This program may be distributed without restriction for non-commercial use.
*/
#import "MOTD.h"
#import "DefaultsTable.h"
#define MAILSND "Mail"
#define NEWMAILSND "NewMail"
#define DEFAULTSFILE "Defaults"
#define MAILMESSAGE NXLocalizedString("You have mail.", NULL, "User has unread mail")
#define NEWMAILMESSAGE NXLocalizedString("You have new mail.", NULL, "User has new mail")
#define MAILTITLE NXLocalizedString("Mail Alert", NULL, "Mail alert panel title")
#define QUITBUTTONTITLE NXLocalizedString("Quit", NULL, "User wants to quit and proceed with login")
#define HOLDBUTTONTITLE NXLocalizedString("Hold (%3d)", NULL, "User wants to hold (and format for seconds)")
#define CANCELBUTTONTITLE NXLocalizedString("Cancel Login", NULL, "User wants to quit and not login")
#define SECOND ((double) 1.0)
extern void timer(DPSTimedEntry, double, id);
@implementation MOTD
+ new
{
char pathnamebuf[MAXPATHLEN];
self = [super new];
bundle = [NXBundle bundleForClass:[self class]];
if ([bundle getPath:pathnamebuf forResource:DEFAULTSFILE ofType:"strings"])
[[[DefaultsTable alloc] initFromFile:pathnamebuf] registerDefaults:[self appName]];
file = getDefault("File");
wait = getIntDefault("Wait");
return self;
}
- appDidInit:sender
{
[[self appIcon] orderOut:self];
if (loginHook) (void) [self activateSelf:YES];
if (!do_motd) wait = getIntDefault("MailWait"); /* short timeout */
timedEntry = DPSAddTimedEntry(SECOND, (DPSTimedEntryProc) &timer, self, NX_BASETHRESHOLD);
return self;
}
- windowWillClose:sender { return [self terminate:sender]; }
- free
{
if (timedEntry != NULL) DPSRemoveTimedEntry(timedEntry);
return [super free];
}
- setMailPanel:anObject
{
char pathnamebuf[MAXPATHLEN];
[(mailPanel = anObject) setTitle:strcat(strcpy(pathnamebuf, MAILDIR), name)];
return self;
}
- setMailText:anObject
{
const char *value;
char pathnamebuf[MAXPATHLEN];
mailText = anObject;
if (maillevel != NONE) {
[mailText setStringValue:(maillevel == NEW) ? NEWMAILMESSAGE : MAILMESSAGE];
[[mailPanel display] orderFront:nil];
if ((value = getSystemDefault("SystemAlert")) != NULL && strcasecmp(value, "Panel") != EQ) {
if ([bundle getPath:pathnamebuf forResource:(maillevel == NEW) ? NEWMAILSND : MAILSND ofType:"snd"])
SNDPlaySoundfile(pathnamebuf, 0);
}
}
return self;
}
- setMailTitle:anObject { [(mailTitle = anObject) setStringValue:MAILTITLE]; return self; }
- txt
{
NXStream *stream;
if ((stream = NXMapFile(file, NX_READONLY)) == NULL) return nil;
[docView readText:stream];
NXClose(stream);
return self;
}
- rtf
{
NXStream *stream;
if ((stream = NXMapFile(file, NX_READONLY)) == NULL) return nil;
[docView readRichText:stream];
NXClose(stream);
return self;
}
- rtfd
{
if([docView openRTFDFrom:file] != NX_RTFDErrorNone) return nil;
return self;
}
- setWindow:anObject
{
window = anObject;
if (do_motd) [[window setTitle:file] makeKeyAndOrderFront:self];
return self;
}
- setDocView:anObject
{
const char *type;
SEL method, action = @selector(txt);
docView = anObject;
if (!do_motd) return self; /* Don't do it unless we have a MOTD window */
/* Can't use [workspace getInfoForFile:file application:&application type:&type]) in LoginHook */
if ((type = rindex(file, '.')) != NULL) {
if ((method = sel_getUid(++type)) != 0 && [self respondsTo:method]) action = method;
}
if([self perform:action] == nil) [self terminate:self];
return self;
}
- quitButton { return quitButton; }
- setQuitButton:anObject { [(quitButton = anObject) setTitle:QUITBUTTONTITLE]; return self; }
- holdButton { return holdButton; }
- setHoldButton:anObject
{
[[(holdButton = anObject) setTitle:HOLDBUTTONTITLE] setState:getBoolDefault("Hold")];
return self;
}
- cancelButton { return cancelButton; }
- setCancelButton:anObject { [(cancelButton = anObject) setTitle:CANCELBUTTONTITLE]; return self; }
- (const char *) userName { return name; }
- setUserName:(const char *) pw_name { name = NXCopyStringBuffer(pw_name); return self; }
- (int) UID { return uid; }
- setUID:(int) pw_uid { uid = pw_uid; return self; }
- (BOOL) do_Motd { return do_motd; }
- setDo_Motd:(BOOL) aBoolean { do_motd = aBoolean; return self; }
- (MailLevel) mailLevel { return maillevel; }
- setMailLevel:(MailLevel) aMailLevel { maillevel = aMailLevel; return self; }
- (const char *) file { return file; }
- setFile:(const char *) aString { file = aString; return self; }
- (BOOL) loginHook { return loginHook; }
- setLoginHook:(BOOL) aBoolean { loginHook = aBoolean; return self; }
- (int) wait { return wait; }
- setWait:(int) anInteger { wait = anInteger; return self; }
- cancelLogin:sender
{
[self free];
exit(EXIT_FAILURE);
return self; /* NOT REACHED */
}
@end